<?xml version="1.0"?>
<ScatterFile xmlns="http://schemas.microsoft.com/netmf/ScatterfileSchema.xsd">

    <Set Name="Valid" Value="false"/>

    <!-- ################################################################################ -->
    <Set Name="Heap_Begin"        Value="0x08100000"/>
    <Set Name="Heap_End"          Value="0x084FFFF8"/>
    <Set Name="Custom_Heap_Begin" Value="0x08500000"/>
    <Set Name="Custom_Heap_End"   Value="0x088FFFF8"/>
    <Set Name="Stack_Bottom"      Value="0x08900000"/>
    <Set Name="Stack_Top"         Value="0x08902000"/>
    
    <IfDefined Name="PROFILE_BUILD">
        <Set Name="ProfileBuffer_Begin"  Value="0x089F0000"/>
        <Set Name="ProfileBuffer_End"    Value="0x089FFFF8"/>
    </IfDefined>

    <If Name="TARGETLOCATION" In="FLASH">

        <!-- Micro2440SDK has 8MB of 32-bit FLASH at 0x10000000 -->
        <Set Name="Config_BaseAddress"  Value="0x10020000"/>    
        <Set Name="Config_Size"         Value="0x00020000"/>
        <Set Name="Code_BaseAddress"    Value="0x10040000"/>    
        <Set Name="Deploy_BaseAddress"  Value="0x101C0000"/>
        <Set Name="Code_Size"           Value="%Deploy_BaseAddress - Code_BaseAddress%"/>
        <Set Name="Valid"               Value="true"/>

        <If Name="TARGETTYPE" In="RELEASE DEBUG">
            <Set Name="Data_BaseAddress"    Value="0x10180000"/>
            <Set Name="Code_Size"           Value="%Data_BaseAddress - Code_BaseAddress%"/>
            <Set Name="Data_Size"           Value="%Deploy_BaseAddress - Data_BaseAddress%"/>
        </If>
    </If>

    <If Name="TARGETLOCATION" In="RAM">

        <Set Name="Heap_Begin"        Value="0x08300000"/>
        <Set Name="Heap_End"          Value="0x085FFFF8"/>
        <Set Name="Custom_Heap_Begin" Value="0x08600000"/>

        <Set Name="Code_BaseAddress"  Value="0x08020000"/>
        <Set Name="Code_Size"         Value="0x002D0000"/>
        <!-- RAM with FLASH config is not needed -->
        <Set Name="Valid"             Value="true"/>

    </If>


    <!-- ################################################################################ -->

    <If Name="Valid" Value="false">
        <Error Message="Configuration not recognized"/>
    </If>

    <LoadRegion Name="LR_%TARGETLOCATION%" Base="%Code_BaseAddress%" Options="ABSOLUTE" Size="%Code_Size%">

        <ExecRegion Name="ER_%TARGETLOCATION%" Base="%Code_BaseAddress%" Options="FIXED" Size="">

            <FileMapping Name="FirstEntry.obj"    Options="(+RO, +FIRST)" /> <!-- the entry pointer section goes into this region -->

            <FileMapping Name="*" Options="(SectionForBootstrapOperations)" />

            <FileMapping Name="*" Options="(+RO-CODE)" />

            <FileMapping Name="*" Options="(+RO-DATA)" />

            <IfNotDefined Name="Data_BaseAddress">

                <FileMapping Name="tinyclr_dat.obj" Options="(+RO, +LAST)" />

            </IfNotDefined>

        </ExecRegion>

        <ExecRegion Name="ER_RAM_RO" Base="0x00000000" Options="ABSOLUTE" Size="0x0005ffe0">

            <FileMapping Name="VectorsTrampolines.obj" Options="(+RO, +FIRST)" /> <!-- for vector handlers to be far from the vectors -->
            <!-- Fiq profile -->
            <IfDefined Name="FIQ_SAMPLING_PROFILER">
                <FileMapping Name="FiqSubhandler_MC9328.obj"  Options="(+RO)" /> <!-- for vector handlers to be far from the vectors -->                
                <FileMapping Name="sampling_profiler_RAM.obj" Options="(+RO)" /> <!-- for flashing without running from flash -->
            </IfDefined>
            
            <Include File="%SPOCLIENT%\Solutions\Micro2440SDK\TinyCLR\scatterfile_ram_functions.xml"/>
            <Include File="%SPOCLIENT%\Solutions\Micro2440SDK\TinyCLR\scatterfile_tinyclr_ram_functions.xml"/>

            <FileMapping Name="*" Options="(SectionForFlashOperations)" />

        </ExecRegion>

        <ExecRegion Name="ER_RAM_RW" Base="+0" Options="ABSOLUTE" Size="">

            <FileMapping Name="*" Options="(+RW-DATA, +ZI)" />

        </ExecRegion>
        
        <!-- Profile build -->

        <IfDefined Name="PROFILE_BUILD">
            <ExecRegion Name="ER_PROFILERBUFFER_BEGIN" Base="%ProfileBuffer_Begin%" Options="ABSOLUTE" Size="UNINIT">
                <FileMapping Name="*" Options="(SectionForProfilerBufferBegin)" />
            </ExecRegion>

            <!-- everything between profilebufferbegin and profilebufferend will be allocated for a buffer -->

            <ExecRegion Name="ER_PROFILERBUFFER_END" Base="%ProfileBuffer_End%" Options="ABSOLUTE" Size="UNINIT">
                <FileMapping Name="*" Options="(SectionForProfilerBufferEnd)" />
            </ExecRegion>
        </IfDefined>



        <ExecRegion Name="ER_HEAP_BEGIN" Base="%Heap_Begin%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForHeapBegin)" />
        </ExecRegion>

        <!-- everything between heapbegin and heapend will be allocated for a heap -->

        <ExecRegion Name="ER_HEAP_END" Base="%Heap_End%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForHeapEnd)" />
        </ExecRegion>


        <ExecRegion Name="ER_CUSTOM_HEAP_BEGIN" Base="%Custom_Heap_Begin%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForCustomHeapBegin)" />
        </ExecRegion>

        <!-- everything between heapbegin and heapend will be allocated for the unmanaged SimpleHeap -->

        <ExecRegion Name="ER_CUSTOM_HEAP_END" Base="%Custom_Heap_End%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForCustomHeapEnd)" />
        </ExecRegion>


        <!-- this must go last here to provide a low water mark on the stack -->

        <ExecRegion Name="ER_STACK_BOTTOM" Base="%Stack_Bottom%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForStackBottom)" />
        </ExecRegion>
        
        <ExecRegion Name="ER_STACK_TOP" Base="%Stack_Top%" Options="ABSOLUTE" Size="UNINIT">
            <FileMapping Name="*" Options="(SectionForStackTop)" />
        </ExecRegion>

    </LoadRegion>

    <!-- If this variable is defined, create a separate section for the tinyclr.dat file -->

    <IfDefined Name="Data_BaseAddress">

        <LoadRegion Name="LR_DAT" Base="%Data_BaseAddress%" Options="ABSOLUTE" Size="%Data_Size%">

            <!-- we have arbitrarily asigned 0x00100000 offset in FLASH for the tinyclr.dat, and size of 0x00080000 -->

            <ExecRegion Name="ER_DAT" Base="%Data_BaseAddress%" Options="FIXED" Size="%Data_Size%">

                <FileMapping Name="tinyclr_dat.obj" Options="(+RO)" />

            </ExecRegion>

        </LoadRegion>

    </IfDefined>

    <IfDefined Name="Config_BaseAddress">

        <LoadRegion Name="LR_CONFIG" Base="%Config_BaseAddress%" Options="ABSOLUTE" Size="%Config_Size%">

            <ExecRegion Name="ER_CONFIG" Base="%Config_BaseAddress%" Options="FIXED" Size="%Config_Size%">

                <FileMapping Name="*" Options="(SectionForConfig)" />

            </ExecRegion>

        </LoadRegion>

    </IfDefined>

</ScatterFile>

